package hl.crazy_java.chapter_18.reflect;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Properties;

/**
 * 框架类
 * @author Liu Huan
 */


public class ReflectTest {
	public static void main(String[] args) throws Exception {
		//可以创建任意类的对象，并执行任意的方法
		
		//1、读取配置文件
		//创建 Properties 对象
		Properties properties = new Properties();
		//获取 文件路径 为一个输入流
		ClassLoader classLoader = ReflectTest.class.getClassLoader();
		InputStream resourceAsStream = classLoader.getResourceAsStream("pro.properties");
		//读取配置文件，转换为一个map集合
		properties.load(resourceAsStream);
		
		//2、获取配置文件中定义的数据
		String clasaname = properties.getProperty("className");
		String methodName = properties.getProperty("methodName");
		
		//3、加载该类到内存
		Class<?> aClass = Class.forName(clasaname);
		
		//4、获取 构造器，创建对象
		Constructor<?> declaredConstructor = aClass.getDeclaredConstructor();
		Object obj = declaredConstructor.newInstance();
		
		//5、获取 方法，执行方法
		Method declaredMethod = aClass.getDeclaredMethod(methodName);
		declaredMethod.invoke(obj);
		
	}
}
